package com.sword.ehcache.api;

import com.sword.ehcache.model.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.*;

/**
 * 用户接口
 * @author sword
 * @date 2021/11/11 17:25
 */
@RestController
@RequestMapping("/user")
@Api(tags = "用户接口")
public class UserApi {

    /**
     * 新增用户，同时以用户id为key将用户信息设置到缓存名称为“user”的缓存中
     * @param user 用户信息
     * @return com.sword.ehcache.model.User
     * @author sword
     * @date 2021/11/28 21:18
     */
    @PostMapping
    @CachePut(cacheNames = "user", key = "#user.id")
    @ApiOperation("新增用户")
    public User insert(@RequestBody User user) {
        return user;
    }

    /**
     * 删除用户，同时以用户id为key将缓存名称为“user”的缓存中对应的数据删除
     * @param id 用户id
     * @return boolean
     * @author sword
     * @date 2021/11/28 21:19
     */
    @DeleteMapping("/{id}")
    @CacheEvict(cacheNames = "user", key = "#id")
    @ApiOperation("删除用户")
    public boolean delete(@PathVariable String id) {
        return true;
    }

    /**
     * 查询指定用户，同时以用户id为key到缓存名称为“user”的缓存中查询对应的数据，如果找到则不执行查询方法直接返回缓存数据
     * 否则先执行查询方法，并将返回结果设置到缓存中
     * @param id 用户
     * @return com.sword.ehcache.model.User
     * @author sword
     * @date 2021/11/28 21:19
     */
    @GetMapping("/{id}")
    @ApiOperation("查询指定用户")
    @Cacheable(cacheNames = "user", key = "#id")
    public User get(@PathVariable String id) {
        return null;
    }
}
